package pharao.client.views.game.landkarte.ort.tutorium;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public class Tutorium {

	/**
	 * enthält die Seite die zz angezeigt wird
	 */
	private int currentPage = 0;
	
	/**
	 * enthält alle Seiten des Tutoriums
	 */
	private List listSeiten = new ArrayList();
	
	/**
	 * enthält den Inhalt des Tutoriums
	 */
	private FlexTable mainTable = new FlexTable();
	
	/**
	 * link zur nächsten Seiten
	 */
	private Hyperlink nextPage = new Hyperlink("Weiter", null);
	
	/**
	 * link zur vorherigen Seite
	 */
	private Hyperlink prevPage = new Hyperlink("Zurück", null);
	
	/**
	 * @param titel Überschrift des Tutoriums
	 */
	public Tutorium(String titel) {
		
		Label labelTitle = new Label(titel);
		
		ClickListener clickListener = new ClickListener() {
			public void onClick(Widget sender) {
				handleHyperlinkAction(sender);
			}
		};
		
		nextPage.addClickListener(clickListener);
		prevPage.addClickListener(clickListener);
		
		mainTable.setWidget(0, 0, labelTitle);
		mainTable.setWidget(1, 0, null);
		mainTable.setWidget(2, 0, null);
		
	}
	
	/**
	 * @param text
	 *            der anzuzeigende Text
	 * @param image
	 *            das Bild zum Text
	 */
	public void addPage(Label text, Image image) {

		VerticalPanel panel = new VerticalPanel();

		panel.add(text);
		panel.add(image);

		listSeiten.add(panel);
	}
	
	/**
	 * liefert das Widget welches das Tutorium enthält
	 */
	public Widget getWidget() {
		return mainTable;
	}
	
	public void startTutorium() {
		showPage(0);
	}
	
	private void handleHyperlinkAction(Widget sender) {
		
		if (sender == nextPage) {
			showNextPage();
		} else if (sender == prevPage) {
			showPrevPage();
		}
	}

	private void showPage(int i) {
		
		/*
		 * aktuelle anzeige löschen
		 */
		mainTable.clearCell(1, 0);
		mainTable.clearCell(2, 0);

		mainTable.setWidget(1, 0, (Widget) listSeiten.get(i));

		/*
		 * Navi-Element anzeigen
		 */
		if (i == 0) {
			mainTable.setWidget(2, 0, nextPage);
		} else if (i >= (listSeiten.size() -1)) {
			mainTable.setWidget(2, 0, prevPage);
		} else {
			
			HorizontalPanel panel = new HorizontalPanel();
			panel.add(prevPage);
			panel.add(nextPage);
			
			mainTable.setWidget(2, 0, panel);
		}
		
	}

	private void showNextPage() {
		
		if (++currentPage >= (listSeiten.size() - 1)) {
			currentPage = listSeiten.size() - 1;
			showPage(currentPage);
		} else {
			showPage(currentPage);
		}
	}

	private void showPrevPage() {
		
		//TODO prüfen ob currentPage verändert wurde
		if (--currentPage <= 0) {
			currentPage = 0;
			showPage(0);
		} else {
			showPage(currentPage);
		}
	}
}
